const express = require('express')
const router = express.Router()

// eg. http://localhost:3000/api/rest/ad?limit=1&page=1
// http://localhost:3000/api/rest/user?limit=1&page=1
router.get('/', async (req, res) => {
  // //  放在前置的中间件内
  // const modelName = require('inflection').classify(req.params.resource) // 通用crud时，转类名转为大写单数
  // const Model = require(`../../models/${modelName}`) // 通用crud时，增加通用模型
  // const Model = require(`../../models/${req.params.resource}`) // 通用crud时，增加通用模型

  // req.Model = require(`../models/User`)
  // 提取10行
  console.log('/路径', req.Model)
  const limit = +req.query.limit || 20
  // 跳过8行
  const offset = ((+req.query.page || 1) - 1) * limit
  // npm i inflection 此插件可以负责单复数的转换
  // 优化阶段，可以把populate关联取出
  const queryOptions = {}
  if (req.Model.modelName === 'Category') {
    queryOptions.populate = 'parent'
  }
  const model = await req.Model.findAndCountAll({ limit: limit, offset: offset, order: [['AutoID', 'DESC']] })
  res.send(model)
})
router.post('/', async (req, res) => {
  console.log('post:', req.body)
  //如果没有post数据或者数据为空,直接返回
  // if (req.body.username == undefined || req.body.username == ''
  //   || req.body.password == undefined || req.body.password == '') {
  //   console.log('参数错误')
  //   res.status(404).json({ code: 404, message: '参数错误' });
  //   return;
  // }
  // // req.Model = require(`../models/User`)
  // var data = {
  //   UserName: req.body.username,
  //   UserPassword: req.body.password
  // };
  // //创建一条记录,创建成功后跳转回首页
  // const item = await req.Model.findOne({ where: { UserName: data.UserName } })
  // if (item) {
  //   res.status(404).json({ code: 200, message: '有同名用户' });
  //   return
  // }
  let model
  if (req.body.AutoID) {
    model = await req.Model.findOrCreate({ where: { AutoID: req.body.AutoID } })
  } else {
    console.log('new item')
    model = await req.Model.create(req.body)
  }

  res.send({ code: 200, data: model, message: '增加成功' })
})
// 根据id查询
router.get('/:id', async (req, res) => {
  // console.log(req.query)
  const limit = +req.query.limit || 100
  const offset = ((+req.query.page || 1) - 1) * limit
  // 方法使用提供的主键从表中仅获得一行数据：
  const model = await req.Model.findByPk(req.params.id, { limit, offset })
  console.log(model)
  if (model) {
    res.send(model)
  }
  if (!model) {
    res.status(404).send({ message: '没有查询到数据' })
  }
})
// 根据id更新修改资源
router.put('/:id', async (req, res) => {
  // console.log(req.query)
  //如果没有post数据或者数据为空,直接返回,要通用 ，就不能判断数据
  // if (req.body.username == undefined || req.body.username == ''
  //   || req.body.password == undefined || req.body.password == ''
  //   || req.params.id == undefined || req.params.id == '') {
  //   res.send('404', {});
  //   return;
  // }
  // 更新一条记录
  const model = await req.Model.update(req.body, {
    where: { AutoID: req.params.id }
  });
  res.send({ code: 200, data: model, message: '修改成功' })
})
// 根据id删除
router.delete('/:id', async (req, res) => {
  console.log(req.params)
  //如果没有id字段,返回404
  if (req.params.id == undefined || req.params.id == '') {
    res.status(404).json({ message: "请输入id参数" });
    return;
  }
  //先查找,再调用删除,最后返回首页
  const item = await req.Model.findOne({
    where: {
      AutoID: req.params.id
    }
  })
  // console.log(item)
  if (!item) {
    res.status(404).json({ message: "id不存在" });
    return;
  }
  const model = await item.destroy()
  res.send({ code: 200, data: model, message: '修改成功' })
})

// const resourceMiddleware = require('../Middleware/resource')
// app.use('/admin/api/rest/:resource', resourceMiddleware(), router)
// app.use('/admin/api/rest/:resource', async (req, res, next) => {
//  放在前置的中间件内，请求时会先用async处理 url
//     const modelName = require('inflection').classify(req.params.resource) // 通用crud时，转类名转为大写单数
//     const Model = require(`../../models/${modelName}`) // 通用crud时，增加通用模型
//     console.log(modelName, Model)
//     // req.Model是在请求对象上挂载Model属性
//     req.Model = Model
//     next()
// }, router)
// 用户登录
// router.get('/login', (req, res) => {
//   // let { username, password } = req.body
//   console.log(req)
//   let { UserName, UserPassword } = { UserName: 'admin', UserPassword: '123456' }
//   // let sqlStr = `SELECT COUNT(*) checkNum FROM tblusers WHERE UserName = "${UserName}" AND UserPassword = "${UserPassword}"`
//   let sqlStr = `SELECT COUNT(*) checkNum FROM tblusers WHERE UserName = ? AND UserPassword = ?`
//   // console.log(UserName, UserPassword, sqlStr)
//   let conn = new DBHelper().getConn()
//   conn.query(sqlStr, [UserName, UserPassword], (err, result) => {
//     if (err) {
//       res.json(err)
//     } else {
//       console.log(result)
//       let checkNum = result[0].checkNum;
//       // res.json(result)
//       console.log('结果为: ', result[0].checkNum);
//       if (checkNum == 0) {
//         console.log('账号或密码不正确');
//         res.send('账号或密码不正确');
//       } else {
//         console.log('登录成功');
//         //返回结果
//         res.json({ code: 0, message: 'success' });
//       }
//     }
//   })
//   conn.end()
// })
// // 增加用户
// router.post('/addUser', (req, res) => {
//   let sqlStr = sql.user.add
//   let params = req.body
//   let conn = new DBHelper().getConn()
//   conn.query(sqlStr, [params.name, params.age], (err, result) => {
//     if (err) {
//       res.json(err)
//     } else {
//       res.json(result)
//     }
//   })
//   conn.end()
// })
// // 查询所有用户
// router.get('/users', (req, res) => {

//   let sqlStr = sql.user.users
//   let params = req.body
//   let conn = new DBHelper().getConn()
//   conn.query(sqlStr, [params.username, params.password], (err, result) => {
//     if (err) {
//       res.json(err)
//     } else {
//       res.json(result)
//     }
//   })
//   conn.end()
// })
// // 查询用户
// router.post('/selectUser', (req, res) => {
//   console.log('1111')
//   let sqlStr = sql.user.select
//   let params = req.body
//   let conn = new DBHelper().getConn()
//   conn.query(sqlStr, [params.name], (err, result) => {
//     if (err) {
//       res.json(err + '1111')
//     } else {
//       console.log(result)
//       res.json(result)
//     }
//   })
//   conn.end()
// })

module.exports = router